home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Grapevine 14
/
Grapevine 14 (Disk 2 of 3).adf
/
BOTHPASCAL.S.lha
/
Grapevine
/
sources
/
pascal1
next >
Wrap
Text File
|
1990-09-14
|
16KB
|
543 lines
____________________________________________________________________________
Program Direct_Access_File_Update;
{Written by Chris Smith (THE COOKIE MONSTER OF DUAL FORMAT)
on the 2nd June 1992}
uses crt;
type
index = record
reckey : integer;
lorecno : integer;
delflag : boolean;
end;
records = record
key : integer;
price : integer;
stock : integer;
end;
ind = array [0..50] of index;
var
indrec : ind;
seqind : index;
indfile : file of index;
master : records;
masterfile : file of records;
exist, deleted, ender, valid : boolean;
norec, nextrec, recno, mid : integer;
procedure sortind (norec : integer);
var
temp : index;
n : integer;
begin
n := norec;
if n > 1 then
while (indrec[n].reckey < indrec[n-1].reckey) and (n>1) do
begin
temp := indrec[n];
indrec[n] := indrec[n-1];
indrec[n-1] := temp;
n := n-1;
end;
end;
procedure searchind (var norec, mid : integer ; keysrch : integer);
var
low, high, digit : integer;
numbfnd : boolean;
begin
low := 1;
high := norec;
numbfnd := false;
repeat
mid := (low + high) div 2;
if keysrch < indrec[mid].reckey then
high := mid - 1
else
if keysrch > indrec[mid].reckey then
low := mid + 1
else
numbfnd := true;
until numbfnd or (low > high);
if keysrch = indrec[mid].reckey then
exist := true
else
exist := false;
if exist then
if indrec[mid].delflag then
deleted := true
else
deleted := false;
end;
procedure copyin (var norec : integer);
begin
norec := 1;
while not eof (indfile) do
begin
read (indfile,seqind);
indrec[norec] := seqind;
norec := norec + 1;
end;
end;
procedure copyout (norec : integer);
var
n : integer;
begin
rewrite (indfile);
n := 1;
while norec > n do
begin
seqind := indrec[n];
write (indfile, seqind);
n := n + 1;
end;
end;
procedure validkey (keysrch : integer);
begin
if (keysrch > 0) and (keysrch < 1000) then
valid := true
else
valid := false;
end;
procedure insertion (var norec : integer);
var
srchkey, stkmnt, price, n : integer;
found : boolean;
ans : char;
begin
clrscr;
textcolor (9);
writeln (` Please Enter The Key To Be Inserted. `);
writeln;
write (`KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
if norec < 5 then
begin
while (exist and not deleted) and valid do
begin
textcolor (132);
write (` THIS RECORD EXISTS. PLEASE RE-ENTER. `);
writeln;
textcolor (9);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
end;
if not valid then
begin
textcolor (132);
write (` THIS RECORD IS NOT VALID. PRESS ENTER. `);
readln;
insertion (norec);
end;
if deleted then
begin
textcolor (132);
writeln (` THIS RECORD HAS BEEN DELETED `);
writeln;
writeln (` DO YOU WISH TO RE-USE THIS RECORD `);
textcolor (4);
write (` ( Y/N )? `);
readln (ans);
writeln;
case ans of
`Y`,`y` : begin
write (`PRICE :- `);readln (price);
write (`STOCK :- `);readln (stkmnt);
recno := indrec[mid].lorecno;
indrec[mid].delflag := false;
master.key := srchkey;
master.price := price;
master.stock := stkmnt;
seek (masterfile, recno);
write (masterfile, master);
end;
end;
end
else
begin
textcolor (9);
writeln (` ENTER THE FOLLOWING `);
writeln;
write (` PRICE :- `); readln (price);
writeln;
write (` STOCK VALUE :- `); readln (stkmnt);
indrec[norec].reckey := srchkey;
indrec[norec].lorecno := norec;
indrec[norec].delflag := false;
master.key := srchkey;
master.price := price;
master.stock := stkmnt;
sortind (norec);
seek (masterfile, norec);
norec := norec + 1;
nextrec := nextrec + 1;
write (masterfile, master);
end;
end
else
begin
found := false;
n := 1;
while (norec > n) and not found do
begin
if indrec[n].delflag then
begin
found := true;
recno := indrec[n].lorecno;
end;
n := n + 1;
end;
if found then
begin
n := n - 1;
while norec > n do
begin
indrec[n] := indrec[n + 1];
n := n + 1;
end;
textcolor (4);
writeln;
write (` PRICE :- `); readln (price);
write (` STOCK :- `); readln (stkmnt);
master.key := srchkey;
master.price := price;
master.stock := stkmnt;
seek (masterfile, recno);
write ( masterfile, master);
indrec[norec-1].reckey := srchkey;
indrec[norec-1].lorecno := recno;
indrec[norec-1].delflag := false;
sortind (norec-1);
end;
if (n = norec) and not found then
begin
textcolor (12);
write (` THE INDEX IS FULL.`);
writeln (`NO MORE RECORDS CAN BE SAVED. `);
write (`PRESS ENTER. `);
readln;
end;
end;
end;
procedure price (norec : integer);
var
srchkey, prcch : integer;
begin
clrscr;
textcolor (3);
writeln (`Please Enter The Key To Change The Price `);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
while (not exist or deleted) and valid do
begin
textcolor (132);
write (` THIS RECORD DOES NOT EXIST. PLEASE RE-ENTER. `);
writeln;
textcolor (3);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
end;
if not valid then
begin
textcolor (132);
write (` THIS RECORD IS NOT VALID. PLEASE RE-ENTER. `);
readln;
price (norec);
end;
recno := indrec[mid].lorecno;
textcolor (5);
writeln (` Please Enter The New Price `);
writeln;
write (` NEW PRICE :- `);
readln (prcch);
seek (masterfile, recno);
read (masterfile, master);
master.price := prcch;
seek (masterfile, recno);
write (masterfile, master);
end;
procedure debit (norec : integer);
var
srchkey, debmnt : integer;
begin
clrscr;
textcolor (3);
writeln (` Please Enter Key To Be Debitted `);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
while (not exist or deleted) and valid do
begin
textcolor (132);
write (` THIS RECORD DOES NOT EXIST. PLEASE RE-ENTER. `);
writeln;
textcolor (3);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
end;
if not valid then
begin
textcolor (132);
write (` THIS RECORD IS NOT VALID. PRESS ENTER. `);
readln;
debit (norec);
end;
recno := indrec[mid].lorecno;
textcolor (5);
writeln (` Please Enter The Amount To Debit The Stock `);
writeln;
write (` DEBIT :- `);
readln (debmnt);
seek (masterfile, recno);
read (masterfile, master);
master.stock := master.stock - debmnt;
seek (masterfile, recno);
write (masterfile, master);
end;
procedure erasure (var norec : integer);
var
srchkey : integer;
ans : char;
begin
clrscr;
textcolor (10);
writeln (` Please Enter The Key To Be Erased `);
writeln;
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
while (not exist or deleted) and valid do
begin
textcolor (132);
write (` THIS RECORD DOES NOT EXIST. PLEASE RE-ENTER. `);
writeln;
textcolor (9);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
end;
if not valid then
begin
textcolor (132);
write ( THIS RECORD IS NOT VALID. PRESS ENTER. `);
readln;
erasure (norec);
end;
textcolor (10);
recno := indrec[mid].lorecno;
seek (masterfile, recno);
read (masterfile, master);
write (` KEY :- `);writeln (master.key);
write (` PRICE :- `);writeln (master.price);
write (` STOCK :- `);writeln )master.stock);
writeln;
textcolor (140);
write (`ARE YOU SURE ????`);
textcolor (12);
write (`( Y/N )`);
readln (ans);
if (ans = `Y`) or (ans = `y`) then
begin
indrec[mid[.delflag := true;
writeln;
textcolor (10); writeln (` RECORD DELETED `);
end;
end;
procedure credit ( var norec : integer);
var
srchkey, credmnt : integer;
begin
clrscr;
textcolor (3);
writeln (` Please Enter The Key To Be Creditted `);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
while (not exist or deleted) and valid do
begin
textcolor (132);
write (` THIS KEY DOES NOT EXIST. PLEASE RE-ENTER. `);
writeln;
textcolor (3);
write (` KEY :- `);
readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
end;
recno := indrec[mid].lorecno;
textcolor (5);
writeln (` Please Enter The Amount To Credit The Stock `);
writeln;
write (` CREDIT :- `);
readln (credmnt);
seek (masterfile, recno);
read (masterfile, master);
master.stock := master.stock + credmnt;
seek (masterfile, recno);
write (masterfile, master);
end;
procedure viewrec (var norec : integer);
var
srchkey : integer;
begin
clrscr;
textcolor (3);
writeln (` ENTER RECORD KEY TO BE VIEWED `);
writeln;
write (` KEY :- `); readln (srchkey);
validkey (srchkey);
searchind (norec, mid, srchkey);
if exist and not deleted and valid then
begin
recno := indrec[mid].lorecno;
seek (masterfile, recno);
read (masterfile, master);
write (` KEY :- `);writeln (master.key);
write (` PRICE :- `);writeln (master.price);
write (` STOCK :- `);writeln (master.stock);
writeln;
writeln;
write (` PLEASE PRESS ENTER `);
readln;
end
else
begin
writeln (` THIS RECORD DOES NOT EXIST. PRESS ENTER `);
readln;
end;
end;
procedure viewindex (norec : integer);
{ THIS IS A HIDDEN FEATURE OF THE PROGRAM DESIGNED FOR TESTING.
BY ENTERING `T` ON THE MENU YOU WILL SEE THE CONTENTS OF THE INDEX.}
var
n, x : integer;
begin
clrscr;
n := norec - 1;
writeln (`KEY LO REC NO DEL`);
while n > 0 do
begin
x := norec - n;
write (indrec[x].reckey,` `);
write (indrec[x].lorecno,` `);
writeln (indrec[x].delflag);
n := n - 1;
end;
writeln;
writeln (` PRESS ENTER `);
readln;
end;
procedure menu (var norec : integer);
var
pckchr : char;
n : integer;
begin
clrscr;
writeln;
textcolor(140);write(` I`);textcolor(15);writeln(`nsert record.`);
textcolor(140);write(` C`);textcolor(15);writeln(`redit stock.`);
textcolor(140);write(` D`);textcolor(15);writeln(`ebit stock.`);
textcolor(140);write(` P`);textcolor(15);writeln(`rice change.`);
textcolor(140);write(` E`);textcolor(15);writeln(`rase record.`);
textcolor(140);write(` V`);textcolor(15);writeln(`iew record.`);
textcolor(140);write(` Q`);textcolor(15);writeln(`uit program.`);
writeln;
writeln;
textcolor (3);
writeln (` Please Select The Appropriate Flashing Letter !!!`);
readln (pckchr);
case pckchr of
`P` , `p` : price (norec);
`C` , `c` : credit (norec);
`D` , `d` : debit (norec);
`E` , `e` : erasure (norec);
`I` , `i` : insertion (norec);
`V` , `v` : viewrec (norec);
`T` , `t` : viewindex (norec);
`Q` , `q` : ender := true;
else
menu (norec);
end;
if not ender then menu (norec);
end;
begin { MAIN PROGGY }
assign (masterfile, `masterfl.dat`);
reset (masterfile);
assign (indfile, `index`);
reset (indfile);
exist := false;
deleted := false;
copyin (norec);
ender := false;
menu (norec);
copyout (norec);
close (masterfile);
close (indfile);
end.